// #ifndef VUE3
import Vue, { Static } from 'vue'
import App from './App'
import store from './store'
// 按需导入 $http 对象
import { $http } from '@escook/request-miniprogram'
import music from "common/music.js"

$http.baseUrl = 'http://9f06-112-49-203-10.ngrok.io/'
// $http.beforeRequest = function (options) {
//   uni.showLoading({
//     title: '数据加载中...',
//     mask:true 
//   })
// }
// // 请求完成之后做一些事情
// $http.afterRequest = function () {
//   uni.hideLoading()
// }
// 在 uni-app 项目中，可以把 $http 挂载到 uni 顶级对象之上，方便全局调用
uni.$http = $http

Vue.config.productionTip = false
//播放歌曲的全局方法
Vue.prototype.$music = function (src,title,songer,imgUrl) {
  this.$store.commit('setSong_play_static',false)
	let aa=uni.getBackgroundAudioManager();
    aa.src=src
    aa.title=title
    aa.singer=songer
    aa.coverImgUrl=imgUrl
  this.$store.commit('setSong_progress',Math.floor(aa.currentTime))
  this.$store.commit('setSong_now_time', Math.floor(aa.currentTime))
  this.$store.commit('setSong_end_time', Math.floor(aa.duration))
  if(this.$store.state.music_loop =='loop_one'){
    aa.onEnded(()=>{  //循环播放
      this.$store.commit('setSong_play_static',false)
      aa.src=src
      aa.title=title
      aa.singer=songer
      aa.coverImgUrl=imgUrl
      aa.startTime=0
      aa.play()
      this.$store.commit('setSong_progress',Math.floor(aa.currentTime))
      this.$store.commit('setSong_now_time', Math.floor(aa.currentTime))
      this.$store.commit('setSong_end_time', Math.floor(aa.duration))
    })
    
  }else if(this.$store.state.music_loop =='random'){
    //等api再写
  }else if(this.$store.state.music_loop =='loop_list'){
    //等api再写
  }
}

//滑動结束放歌
Vue.prototype.$setTimeplay = function (setTime,src,title,songer,imgUrl) {
  this.$store.commit('setSong_play_static',false)
  let aa=uni.getBackgroundAudioManager();
  if(aa.paused==true&&this.song_src != ''||aa.paused==false){
    if(aa.paused==true){
      aa.play()
    }
    aa.seek(setTime)
  }else {
    aa.src=src
    aa.title=title
    aa.singer=songer
    aa.coverImgUrl=imgUrl
    aa.play()
    aa.seek(setTime)
  }
  this.$store.commit('setSong_progress', Math.floor(aa.currentTime))
  this.$store.commit('setSong_now_time', Math.floor(aa.currentTime))
  this.$store.commit('setSong_end_time', Math.floor(aa.duration))    
  if(this.$store.state.music_loop =='loop_one'){
    aa.onEnded(()=>{  //循环播放
      this.$store.commit('setSong_play_static',false)
      aa.src=src
      aa.title=title
      aa.singer=songer
      aa.coverImgUrl=imgUrl
      aa.play()
      this.$store.commit('setSong_progress',Math.floor(aa.currentTime))
      this.$store.commit('setSong_now_time', Math.floor(aa.currentTime))
      this.$store.commit('setSong_end_time', Math.floor(aa.duration))
    })
    
  }else if(this.$store.state.music_loop =='random'){
    //等api再写
  }else if(this.$store.state.music_loop =='loop_list'){
    //等api再写
  }
}

//点击播放歌曲的全局方法
Vue.prototype.$clickPlayMusic = function (id,name,singer){
  setTimeout(async ()=>{
    let {data:{data}}=await uni.$http.get("song/url?id=" + id)
    //如果有音源直接播放
    if(data!=undefined){
      uni.showLoading({
          title: '歌曲加载中...',
          mask:true,
      })
      this.$store.commit("setSong_title",name)
      this.$store.commit("setSong_singer",singer)
      this.$store.commit("setSong_src",data)
      //直接改变vuex中的变量之后并不能立即获取改变的数据
      //有可能会无法获取到更改后的数据
      //获取歌曲信息取得专辑id
      let {data:{data:{track_info:{album:{mid}}}}}=await uni.$http.get("song?songmid=" + id)
      //通过专辑再去获取专辑图片，如果没有专辑就直接播放
      let picture=""
      if(mid==""){
        picture=this.$store.state.song_imgurl
        this.$store.commit("setSong_imgurl","/static/my/music-icon.png")
        //使用的都是直接传输过来的数据，尽量不使用更改后的vuex变量
        this.$music(data,name,singer,this.$store.state.song_imgurl)
      }else{
        let {data:{data:{picurl}}}=await uni.$http.get("album?albummid=" + mid)
        picture=picurl
        this.$store.commit("setSong_imgurl",picurl)
        //使用的都是直接传输过来的数据，尽量不使用更改后的vuex变量
        this.$music(data,name,singer,picurl)
      }
      //获取歌词
      let _word=""
      let {data:{data:{lyric}}}=await uni.$http.get("lyric?songmid=" + id)
      if(lyric==""){
        _word="暂无歌词"
        await this.$store.commit("setSong_word","暂无歌词")
      }else {
        _word=lyric
        await this.$store.commit("setSong_word",lyric)
      }
       //同步缓存本地历史记录，解决vuex刷新页面数据丢失问题
      let list_={song_src:data,song_title:name,song_singer:singer,
        song_image:picture,song_word:_word}
      if(uni.getStorageSync('song_history')==""){
        await uni.setStorageSync('song_history', JSON.stringify([list_]))
      }else {
        let value=JSON.parse(uni.getStorageSync('song_history'))
        // 处理歌曲信息
        let deci=await music.decideSameMusic(value,list_)
        //重新添加回本地存储
        console.log(value,deci)
        uni.setStorageSync('song_history',JSON.stringify(value))
      }
    uni.hideLoading()
      uni.navigateTo({
        url:"/pages/musicpage/musicpage"
      })
    }else {
      uni.hideLoading()
      //无音源提示
      uni.showToast({
        title:"找不到此音源",
        mask:true,
        icon:"error"
      })
      setTimeout(function () {
        uni.hideToast();
      }, 1500);
    }
    clearInterval(this.http)
  },10)
}

App.mpType = 'app'

const app = new Vue({
  store,
  ...App
})

app.$mount()
// #endif

// #ifdef VUE3
import {
  createSSRApp
} from 'vue'
import App from './App.vue'
export function createApp() {
  const app = createSSRApp(App)
  return {
    app
  }
}
// #endif
